package de.slikey.effectlib.effect; import de.slikey.effectlib.Effect; import de.slikey.effectlib.EffectManager; import de.slikey.effectlib.EffectType; import de.slikey.effectlib.util.RandomUtils; import org.bukkit.Color; import org.bukkit.FireworkEffect; import org.bukkit.FireworkEffect.Builder; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Firework; import org.bukkit.inventory.meta.FireworkMeta; import org.bukkit.util.Vector; public class BigBangEffect extends Effect { public FireworkEffect.Type fireworkType = FireworkEffect.Type.BURST; public Color color = Color.RED; public Color color2 = Color.ORANGE; public Color color3 = Color.BLACK; public Color fadeColor = Color.BLACK; public int intensity = 2; public float radius = 2; public int explosions = 10; public int soundInterval = 5; public Sound sound = Sound.ENTITY_GENERIC_EXPLODE; public float soundVolume = 100; public float soundPitch = 1; protected int step = 0; protected FireworkEffect firework; public BigBangEffect(EffectManager effectManager) { super(effectManager); type = EffectType.REPEATING; period = 2; iterations = 400; asynchronous = false; } @Override public void reset() { this.step = 0; } @Override public void onRun() { if (firework == null) { Builder b = FireworkEffect.builder().with(fireworkType); b.withColor(color).withColor(color2).withColor(color3); b.withFade(fadeColor); b.trail(true); firework = b.build(); } Location location = getLocation(); for (int i = 0; i < explosions; i++) { Vector v = RandomUtils.getRandomVector().multiply(radius); detonate(location, v); if (soundInterval != 0 && step % soundInterval == 0) { location.getWorld().playSound(location, sound, soundVolume, soundPitch); } } step++; } protected void detonate(Location location, Vector v) { final Firework fw = (Firework) location.getWorld().spawnEntity(location.add(v), EntityType.FIREWORK); location.subtract(v); FireworkMeta meta = fw.getFireworkMeta(); meta.setPower(0); for (int i = 0; i < intensity; i++) { meta.addEffect(firework); } fw.setFireworkMeta(meta); fw.detonate(); } }